<!--
 * @Author: byron
 * @Date: 2021-08-27 09:22:10
 * @LastEditTime: 2021-08-27 10:41:59
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello World</title>
</head>

<body>
    <!-- 准备容器 -->
    <div id="test"></div>

    <!-- 引入必要的js库 -->
    <script type="text/javascript" src="../lib/react.development.js"></script>
    <script type="text/javascript" src="../lib/react-dom.development.js"></script>
    <!-- 引入babel库进行语法转化 -->
    <script type="text/javascript" src="../lib/babel.min.js"></script>

    <script type="text/babel">
        class MyComponent extends React.Component{
            // 构造器  初始类的属性
            constructor(props){
                super(props);
                this.state = { ishot: true };
                // 解决change中的this指向问题
                this.change = this.change.bind(this)
            }
            render(){
                console.log(this);
                // render 是放在哪的？--MyComponent的原型对象上，供实例使用
                // render中的this是谁？--MyComponent的实例对象
                return <h2 onClick = {this.change}>天气{this.state.ishot ? '炎热' : '凉爽'}</h2>
            }
            // change放在哪里？--放在MyComponent原型对象上
            // change是作为onclick的回调，不是通过实例调用的，是直接调用
            // 类中的方法默认开启了局部的严格模式，所以change中的this为undefined
            change(){
                console.log(this.state.ishot);
                this.state.ishot = !this.state.ishot
        }
        }
        // 添加点击事件
        // function demo(){
        //     alert('我')
        // }

    // 渲染虚拟dom到页面
    ReactDOM.render(<MyComponent/>,document.getElementById("test"))
    /*
    1.React解析组件标签，找到组件
    2.发现组件使用类定义，随后new该类实例，并通过该实例调用到原型的render方法
    3.将render返回的虚拟DOM转为真是DOM，随后呈现在页面中
    */
    </script>
</body>

</html>